<?php
namespace app\common\behavior;


use app\common\model\HomeAccessLog;
use app\common\model\HomeBwList;
use app\common\model\HomeAccessConfig;
/**
 * @author Yel 2019/7/24
 * 用户日志——Home/Admin模块
 */
class UserAccess{

	use \traits\controller\Jump;//类里面引入jump;类

	/**
	 * @author Yel 2019/7/24
 	 * 检测访问并写入数据库
	 */
	public function writeAccess(&$params){
		//空间开辟
		$qiantai = false;  //前台是否开启访问记录
		$qiantai_bw = 0;   //0：关闭记录 1：开启黑名单记录 2：开启白名单记录 3：开启黑白名单记录

		$houtai  = false;  //后台是否开启访问记录
		$houtai_bw = 0;    //0：关闭记录 1：开启黑名单记录 2：开启白名单记录 3：开启黑白名单记录

		//检测访问配置是否开启
		$HomeAccessConfig = new HomeAccessConfig();
		$access_config = $HomeAccessConfig->selectData(['key'=>['in','QIANTAI,HOUTAI']]);
		//对配置进行检测
		foreach ($access_config as $key => $value) {
			if($value['key'] === 'QIANTAI'){
				//前台访问检测
				if($value['status'] == 1){
					//开启了检测
					$qiantai = true;
					$qiantai_bw = $value['flag'];
				}
			}
			if($value['key'] === 'HOUTAI'){
				//后台访问检测
				if($value['status'] == 1){
					//开启了检测
					$houtai = true;
					$houtai_bw = $value['flag'];
				}
			}
		}

		//当前访问的模块名
	    $module = request()->module();
	    //前台记录
		if($module == 'index'){
        	$this->modelAccess($qiantai,$qiantai_bw,'errormsg/put_error/notAccess');
		}
		//后台记录
		if($module == 'admin'){
        	$this->modelAccess($houtai,$houtai_bw,'errormsg/put_error/notAccess');
		}
	}

	/**
	 * 访问记录方法
	 * @author Yel  2019/7/12
	 * @copyright  yel
	 * @param    boolean   $tai     真为开启
	 * @param    int       $tai_bw  0：关闭记录 1：开启黑名单记录 2：开启白名单记录 3：开启黑白名单记录
	 * @param    string    $url      禁止访问后跳转的地址 //'errormsg/put_error/notAccess' 
	 * @return   boolean    
	 */
	private function modelAccess($tai,$tai_bw,$url){
		//开启前台记录
		if($tai){
			//获取用户IP
	        $data['ip'] = request()->instance()->ip(); //IP

	        //查看是否在黑白名单中
	        $HomeBwList = new HomeBwList();
	        $Bw = $HomeBwList -> findData(['ip'=>$data['ip']]);
	        if($Bw){
	        	//如果有存在黑白名单中
	        	if($tai_bw == 0){//如果关闭了
	        		if($Bw['type'] == 1){ //白名单
	        			return true;
	        		}else{ // 黑名单
	        			$this->redirect($url);
	        		}
	        	}
	        	//只开启黑名单记录
	        	if($tai_bw == 1){
	        		if($Bw['type'] == 1){ //白名单
	        			return true;
	        		}
	        	}
	        	//只开启白名单记录
	        	if($tai_bw == 2){
	        		if($Bw['type'] == 0){ //黑名单
	        			$this->redirect($url);
	        		}
	        	}
	            //$data['status']：状态：0：被拦截  1：正常  // $Bw['type'] 类型：0：黑名单   1：白名单
	            $data['status'] = $Bw['type'];  
	        }

			//当前访问的模块名
	        $module = request()->module();
	        //当前访问的控制器
	        $controller = request()->controller();
	        //当前访问的方法
	        $action = request()->action();

	        $data['mac'] = $module.'/'.$controller.'/'.$action; //访问地址

	        //存储数据
	        $data['addtime'] = time(); //访问时间
	        $HomeAccessLog = new HomeAccessLog();
	        //数据增加
	        $HomeAccessLog->addData($data);

	        //黑名单跳转
	        if($Bw && $Bw['type'] == 0){ // 黑名单
    			$this->redirect($url);
    		}
    		//白名单
    		if($Bw && $Bw['type'] == 1){
	            return true;
	        }
		}
	}
}